'''
对相关性进行探索性分析
完成人：李枳岑
'''
import pandas as pd
import  numpy as np
import  re
import warnings
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
from pylab import mpl
mpl.rcParams["axes.unicode_minus"] = False
mpl.rcParams['font.family'] = 'Microsoft YaHei'
from sklearn.preprocessing import MinMaxScaler
import seaborn as sns

# 读取CSV文件
df = pd.read_csv("Buildings_finall_handle.csv")

# 打印“区域”列中的唯一值
print(df['区域'].unique())

# 去除“区域”列中字符串的首尾空格
df['区域'] = df['区域'].str.strip()

# 定义一个替换字典，用于将“区域”列中的特定值替换为其他值
replace_dict = {
    '瑞辰玖阙': '兰州新区',
    '永登': '永登县',
    '瑞辰金悦府': '兰州新区',
    '海亮·公园学府': '兰州新区',
    '皋兰': '皋兰县',
    '新区万科城': '兰州新区',
    '远达锦绣半岛': '安宁区',
    '安宁': '安宁区',
    '安宁庭院': '安宁区',
    '酒泉御园飞天花苑住宅小区': '安宁区',
    '新厦水岸天成': '安宁区',
    '兰石豪布斯卡璟园': '七里河区',
    '七里河': '七里河区',
    '中和教育世家': '安宁区',
    '天泰世纪嘉园': '七里河区',
    '百合家园': '七里河区',
    '兰州恒大帝景': '七里河区'
}

# 使用replace方法替换“区域”列中的值
df['区域'] = df['区域'].replace(replace_dict)

# 打印替换后的“区域”列
print(df['区域'])

# 计算每个区域的平均总价
df.groupby("区域")['总价（万元）'].mean()

# 使用pivot_table方法创建透视表，计算每个区域和楼层的平均总价
df_ana = pd.pivot_table(df, values=['总价（万元）'], index=['区域', '楼层'], aggfunc='mean')
print(df_ana)

# 创建一个新列“经济发展水平”，并将其设置为与“区域”列相同的值
df['经济发展水平'] = df['区域']
#欲探索经济发展对房价的影响因素，通过了解2023年兰州各区收入水平，对地区进行数据替换
# 定义一个替换字典，用于将“经济发展水平”列中的特定值替换为数值

df['经济发展水平'] = df['区域']
replace_dict = {
    '兰州新区':374.3,
     '永登县':144.4,
     '皋兰县':67.3,
     '安宁区':305.81,
     '七里河区':610.87,
}

# 使用replace方法替换“经济发展水平”列中的值
df['经济发展水平'] = df['经济发展水平'].replace(replace_dict)
print(df['经济发展水平'])

# 定义要归一化的列
columns_to_normalize = ['经济发展水平', '面积', '单价(元/m²)', '总价（万元）', '层数']

# 创建一个MinMaxScaler对象
scaler = MinMaxScaler()

# 对指定的列进行归一化处理
df[columns_to_normalize] = scaler.fit_transform(df[columns_to_normalize])

# 提取归一化后的列，创建一个新的DataFrame
df_normalize = df[columns_to_normalize]

# 计算归一化后列的相关系数矩阵，并打印
print(df_normalize.corr())

# 定义要计算相关系数的列
selected_columns = ['经济发展水平', '面积', '单价(元/m²)', '总价（万元）', '层数']

# 计算选定列的相关系数矩阵
corr_matrix = df[selected_columns].corr()

# 打印相关系数矩阵
print(corr_matrix)

# 绘制热图，显示选定列的相关系数
plt.figure(figsize=(8, 6))

sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f')

plt.title('选定列的相关系数热图')

plt.savefig('chart.png')  # 保存热图为PNG文件

plt.show()  # 显示热图